package lz.controls.events
{

	import flash.events.Event;

	/**
	 * DataChangeEvent 类定义事件，该事件在与组件关联的数据更改时调度。
	 * List、DataGrid、TileList 和 ComboBox 组件使用该事件。
	 * 该类提供下列事件：
	 * DataChangeEvent.DATA_CHANGE：在组件数据更改时调度。
	 */
	public class DataChangeEvent extends Event 
	{
		/**
         * 定义 dataChange 事件对象的 type 属性值。
		 */
		public static const DATA_CHANGE:String = "dataChange";
		/**
		 * 定义 preDataChange 事件对象的 type 属性值。
		 * 该事件对象在更改组件数据之前调度。
		 */
		public static const PRE_DATA_CHANGE:String = "preDataChange";
        /**
         * @private (protected)
		 */
		protected var _startIndex:uint;
        /**
         * @private (protected)
		 */
		protected var _endIndex:uint;
        /**
         * @private (protected)
		 */
		protected var _changeType:String;
        /**
         * @private (protected)
		 */
		protected var _items:Array;
		/**
		 * 使用指定的参数创建新的 DataChangeEvent 对象。
		 * 参数
		 * eventType:String — change 事件的类型。
		 * changeType:String — 所做更改的类型。DataChangeType 类定义此参数的可能值。
		 * items:Array — 更改的项目的列表。
		 * startIndex:int (default = -1) — 所更改的第一个项目的索引。
		 * endIndex:int (default = -1) — 所更改的最后一个项目的索引。
		 */
		public function DataChangeEvent(eventType:String, changeType:String, items:Array,startIndex:int=-1, endIndex:int=-1):void 
		{
			super(eventType);
			_changeType = changeType;
			_startIndex = startIndex;
			_items = items;
			_endIndex = (endIndex == -1) ? _startIndex : endIndex;
		}
		/**
		 *  获取触发事件的更改类型。
		 */
		public function get changeType():String 
		{
			return _changeType;
		}
		/**
         * 获取包含更改的项目的数组。
		 */
		public function get items():Array
		{
			return _items;
		}
		/**
		 * 获取更改的项目数组中第一个更改的项目的索引。
		 */
		public function get startIndex():uint
		{
			return _startIndex;
		}
		/**
         * 获取更改的项目数组中最后一个更改的项目的索引。
		 */
		public function get endIndex():uint 
		{
			return _endIndex;
		}
		/**
		 * 返回一个字符串，其中包含 DataChangeEvent 对象的所有属性。
		 */
		override public function toString():String 
		{
			return formatToString("DataChangeEvent", "type", "changeType", "startIndex", "endIndex", "bubbles", "cancelable");
		}
		/**
		 *创建 DataEvent 对象的副本，并设置每个参数的值以匹配原始参数值。
		 */
		override public function clone():Event 
		{
			return new DataChangeEvent(type, _changeType, _items, _startIndex, _endIndex);
		}
	}
}